UserPort Documentation (Modified for use with Dejan Flasher for Nokia Phones)

1 Summary

UserPort.SYS is a kernel mode driver for Windows NT/2000 that gives usermode programs access to I/O Ports. This makes it possible to access hardware directly from a normal executable in the same way as under Windows 95/98/ME. This driver does not work on Windows 95/98/ME and there is really no need to run it anyway because I/O ports are always granted to usermode programs on these operating systems. 

The driver can be used for the following purposes:

 To run software on Windows NT/2000 that normally only runs on Windows 95/98/ME.
 To easily access hardware like the parallel port and other I/O ports.

So whats the drawbacks with this wonderful software? Microsoft has for security reasons prohibited usermode access to I/O ports. Opening up I/O ports creates a big security hole in your system. You should therefore carefully set the grant lists to only give usermode access to the specific I/O ports you need. The default values opens up a wide range of I/O ports and you should narrow it down. If you are writing your own software you should only grant access through the file \\.\UserPort. Access is then given to your program when you open the file \\.\UserPort. Other programs that dont open \\.\UserPort will not have access to these I/O ports.


2 Installation

The driver can be installed in the following two ways:

 Copy UserPort.SYS to %WINDIR%\SYSTEM32\DRIVERS Start UserPort.EXE and add the addresses you
  want and remove the others and clock on start.
  i.e. Copy Userport.sys to C:\Windows\System32\Drivers

 Run UserPort.EXE with the driver filename and path as an argument 
  i.e. run UserPort.EXE X:\YOURDIR\UserPort.SYS or UserPort Userport.Sys

---------------------------------------------------------------------------------------------
After Executing UserPort.exe Press on Start then Run Your Flasher Shell Such as Green Flasher Shell, Darkflasher Shell, Dos Flasher Shell by Celfixed, or any other shell that uses Dejan Flasher Software.

Tested Under Dos Flasher Shell by Celfixed 100% Working 

Note: Always Run Dejan Flasher in FULL SCREEN not Windowed (if you are in windowed mode you 
can goto FULL SCREEN by pressing ALT ENTER

---------------------------------------------------------------------------------------------


(The default settings are set but you can Add the addresses you want and remove the others and click on start. You should now have usermode access to the addresses you have chosen.)

3 Technical Description

The driver gives user mode program access to selected ports by changing the x86-processors IOPM (I/O Permission Map). For a detailed description on the TSS see Intel proccessor handbooks.

The original size of the TSS is 0x20ab and the driver extends it to 0x2135. The default IOPM offset is 0x20ad and this value is rewritten by the OS on every task switch. The IOPM offset must therefore be changed with the undocumented function Ke386IoSetAccessProcess, which sets the IOPM offset to 0x88. The AllProcessesIOPM is written to 0x20ad because this is the default IOPM offset for all processes and the ThroughCreateFileIOPM is written to 0x88 because the Ke386IoSetAccessProcess function sets the IOPM offset to 0x88. The Ke386IoSetAccessProcess function is called when a user mode program opens the file \\.\UserPort. The driver loads the two IOPM:s from:

HKEY_LOCAL_MACHINE\Software\UserPort\AllProcessesIOPM
HKEY_LOCAL_MACHINE\Software\UserPort\ThroughCreateFileIOPM

